Modern applications, such as multimedia applications where text, audio, speech, video, and data communications are all processed in real-time, require special considerations. Typically, standard commercially available microcomputers do not have the requisite processing power to perform all the operations in a real-time environment. Many modern architectures designed to perform these types of operations in real-time include digital signal processors (DSPs). DSPs perform mathematical operations on digital signals, wherein digital signals are digital representations of analog signals, such as sounds, images or speech. To correctly process such digitized signals, it is necessary to know the sample rate at which the signals are digitized and the format of the digital bits representing the analog signal. Using the sample rate and format, the digitized signal can be manipulated by application software programs and systems, known as clients. The resulting data can be stored or can be converted back into analog signals. The application software programs that utilize DSP processors are hereinafter referred to as a "host DSP applications," while the software code that is actually executed on a DSP is referred to as a DSP program. For example, a host DSP application may be a program to create and edit music, while a DSP program may be used for compressing, decompressing and mixing stored audio data or for recording and playing back such audio data. In some instances, host DSP applications are supported using dedicated hardware components, such as modems or audio interfaces or graphical display interfaces.
DSP applications are typically comprised of multiple operations performed on the signals (i.e., the data). The emphasis of these DSP applications is on the signal or data flow. As one operation is completed, the resulting data "flows" to the next operation so that it can be manipulated. The data flow in DSP applications is usually accomplished by storing the data in locations, i.e., buffers, after completion of an operation. The data is then read from the buffer, processed by the next operation, and stored into yet another buffer. Moving the buffers in memory to accommodate consecutive operations often requires a substantial percentage of the processing time. Furthermore, the buffers, and its associated memory space, are typically located off-chip in slower static random access memory (SRAM) or dynamic random access memory (DRAM). Thus, where several operations are involved, the data must be loaded on-chip, an operation performed, and then the resulting outgoing data must be stored off-chip. Then for the next operation the data would be loaded back on the chip, the next operation would be performed, and the data would be stored back off-chip. During the time the data is moved between buffer locations, the DSP is not performing any computational operation. Thus, a significant percentage of the time involved in utilizing the DSP is in moving data on and off the chip so that it may be processed. For some applications and DSPs, more than twenty-five percent of the functional time is spent waiting while data is loaded and unloaded on and off-chip between operations, depending on the system hardware.
By performing the load and store operations to move data on and off-chip, the prior art DSP programs typically permit the data flow to be controlled. The control of the data flow is inherent in the operations which comprise the program. Typically, in the prior art, the operations are programmed, such that the buffer locations are fixed in the source code. Therefore, in the prior art, the data flow is controlled by the program operation and not by the host DSP applications software.
One particular DSP application is the basic input/output subsystem (BIOS) for a computer system. The BIOS is a system that allows data to be input into a system, processed by the system, and output from that system. Particularly with respect to DSP-based systems, the BIOS is used to input data into the DSP processing domain and to output processed data to one or more peripheral output devices. The BIOS is utilized in DSP sound systems to provide output and input of sound data to and from sound I/O devices, such as speakers and microphones. In the prior art, the BIOS typically only accommodated one client (i.e., application or system) at a time. Therefore, if multiple clients desired to gain access, all of the clients must wait while another client accesses the BIOS.
Prior art sound BIOS also are restricted by their functional speed of operation. For real-time processing by the DSP, the BIOS must set the sample rate of the sound data to ensure that the DSP is supplied with a constant supply of data for processing. Thus, the data must be sampled by the BIOS at an unchanging rate. If the I/O sample rate changes, the DSP processing system may not be able to accommodate the increase in the amount of data, thereby forcing the BIOS to stop sampling sound data, or the DSP processing system may be starved for data due to the decrease in the amount of data, causing DSP processing to halt.
As will be seen, the present invention provides a sound patchbay which provides multiple clients (i.e., applications and systems) simultaneous access to the sound input and output. In this manner, separate applications can access the sound input and output data streams without each application having prior knowledge of each other. Also, the present invention provides an abstract method for providing multiple independent services to the sound data stream. For example, an automatic volume control pre-process, a speech recognizer (which receives raw input), a compressor/recorder, a sound player/decompressor, an equalizer (post-process) and a signal router (which redirects raw output to a different device) can all be provided to the sound data stream without clients knowing of the others functional existence.